# !/usr/bin/env python
# -*- coding: utf-8 -*-
"""
@Time        : 2021/9/12 10:16
@Author      : Albert Darren
@Contact     : 2563491540@qq.com
@File        : iris_dataset.py
@Version     : Version 1.0.0
@Description : TODO
@Created By  : PyCharm
"""
import numpy as np
from sklearn.datasets import load_iris
import pandas as pd

data = load_iris()  # return a dictionary-like object
# print(dir(data)) # ['DESCR', 'data', 'feature_names', 'filename', 'frame', 'target', 'target_names']
dataframe = pd.DataFrame(data=data.data)
# 获取第一列的sepal length
sepal_length = np.array(dataframe.iloc[:, 0])
# 获取第三列的petal_length
petal_length = np.array(dataframe.iloc[:, 2])


# 求出鸢尾属植物萼片长度的平均值、中位数和标准差
# print("""鸢尾属植物萼片长度的平均值:{}cm
# 中位数:{}cm
# 标准差:{}""".format(sepal_length.mean(), np.median(sepal_length), sepal_length.std()))
# 找到鸢尾属植物萼片长度的第10和第80百分位数
# print("""鸢尾属植物萼片长度的第10百分位数:{}cm
# 第80百分位数:{}cm""".format(*np.percentile(sepal_length, [10, 80])))
#
#
# def rand_index(count=30, max_val=600):
#     """
#     随机生成count个不重复的max_val范围以内的整数，作为修改的位置一维索引
#     :param count: 修改索引数量，默认30个
#     :param max_val: 索引范围最大值，默认600
#     :return: 一维随机索引
#     """
#     index = np.arange(max_val)
#     np.random.seed(1)
#     np.random.shuffle(index)
#     return index[:count]
#
#
# def transform(coordinates):
#     """
#         将一维索引转化为二维索引
#         :param coordinates: 一维索引数组
#         :return: 二维索引数组的行索引，列索引
#         """
#     return coordinates // 4, coordinates % 4
#
#
# def count_nan(array):
#     """
#         统计数组array的nan数量
#         :param array:
#         :return:
#         """
#     return np.count_nonzero(np.isnan(array))
#
#
# def set_nan(dataset):
#     """
#     随机修改DataFrame对象的30个位置元素为nan，并返回
#     :param dataset: DataFrame对象
#     :return: 修改后的DataFrame对象
#     """
#     array = np.array(dataset)
#     array[transform(rand_index())] = np.nan
#     return pd.DataFrame(array)
#
#
# print("修改前iris_data数据集中的nan数量:{}".format(count_nan(dataframe)))
# print(dataframe)
# dataframe = set_nan(dataframe)
# print("修改后iris_data数据集中的nan数量:{}".format(count_nan(dataframe)))
# print(dataframe)
#
# 筛选具有 sepal length（第1列）< 6.0 并且 petal length（第3列）> 1 的 iris_data行
print(np.where(np.logical_and(sepal_length < 6.0, petal_length > 1)))
